/**
* @file queue.h
* @brief 采用数组实现
* @author 
* @date 
* @version 
*/
#ifndef _QUEUE_H
#define _QUEUE_H

#include <stdio.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <pthread.h>
#include "udp.h"

#define QUEUE_MAXSIZE 8
#define SEND_MSGSIZE    32

// 布尔类型  
typedef int bool;  
#define false (0)  
#define true  (1) 

char info[SEND_MSGSIZE];       //给客户端发消息的缓冲区
socklen_t sin_size;            //socket通信所用
int sockfd;                    

//数据消息结构体
typedef struct Message
{
    struct sockaddr_in client;      // 客户端信息，标识唯一连接
   // int flag;                       // 请求码，what are you doing?
    MSG msg;                    // 消息体
}Elem;


//队列的节点结构
typedef struct Queue{
    Elem *elem;         //初始化的动态分配存储空间
    int front;          //头指正，若队列不空指向队列头元素
    int rear;           //尾指针，若队列不空指向其尾元素的下一个位置

    pthread_mutex_t queue_lock;
    pthread_cond_t queue_ready;
    pthread_t *threadid;
}SQueue;

SQueue *q;
extern int Queue_Init(SQueue *queue, int threadNum);
extern int Queue_Length(SQueue *queue);
extern bool Queue_isFull(SQueue *queue);
extern bool Queue_isEmpty(SQueue *queue);
extern int Queue_Destroy(SQueue *queue);
extern int Queue_Enqueue(SQueue *queue, Elem *elem);
extern int Queue_Dequeue(SQueue *queue, Elem *elem);
extern void Queue_Traverse(SQueue *queue);

#endif /**< _Queue_H */